package cn.iocoder.yudao.module.jifenyuan.service.wallet;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.jifenyuan.controller.app.wallet.vo.*;
import cn.iocoder.yudao.module.jifenyuan.dal.dataobject.wallet.WalletDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 记分员 钱包 Service 接口
 *
 * @author 芋道源码
 */
public interface WalletService {

    /**
     * 创建记分员 钱包
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWallet(@Valid AppWalletCreateReqVO createReqVO);

    /**
     * 更新记分员 钱包
     *
     * @param updateReqVO 更新信息
     */
    void updateWallet(@Valid AppWalletUpdateReqVO updateReqVO);


    /**
     * 更新钱包余额
     *
     * @param userId 更新信息
     */
    int addWalletCoin(Long userId,Long coin);


    int addWalletVip(Long userId,int day);
    /**
     * 更新钱包余额
     *
     * @param userId 更新信息
     */
    int reduceWalletCoin(Long userId,Long coin);


    /**
     * 删除记分员 钱包
     *
     * @param id 编号
     */
    void deleteWallet(Long id);

    /**
     * 获得记分员 钱包
     *
     * @param id 编号
     * @return 记分员 钱包
     */
    WalletDO getWallet(Long id);


    /**
     * 获得记分员 钱包
     *
     * @param userId 用户id
     * @return 记分员 钱包
     */
    WalletDO getWalletByUserId(Long userId);

    /**
     * 获得记分员 钱包列表
     *
     * @param ids 编号
     * @return 记分员 钱包列表
     */
    List<WalletDO> getWalletList(Collection<Long> ids);

    /**
     * 获得记分员 钱包分页
     *
     * @param pageReqVO 分页查询
     * @return 记分员 钱包分页
     */
    PageResult<WalletDO> getWalletPage(AppWalletPageReqVO pageReqVO);

    /**
     * 获得记分员 钱包列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 记分员 钱包列表
     */
    List<WalletDO> getWalletList(AppWalletExportReqVO exportReqVO);

}
